{
    //  类的基本定义和生成实例
    class Parent {
        //  构造函数
        constructor(name = 'Lay') {
            this.name = name;
        }
    }

    let v_parent = new Parent('v');
    console.log('构造函数和实例', v_parent);
}

{
    class Parent {
        //  构造函数
        constructor(name = 'Lay') {
            this.name = name;
        }
    }

    //  继承
    class Child extends Parent {

    }
    console.log('继承', new Child())
}

{
    class Parent {
        //  构造函数
        constructor(name = 'Lay') {
            this.name = name;
        }
    }

    //  继承传递参数
    class Child extends Parent {
        constructor(name = 'child') {
            //  super一定要放在构造函数的第一行
            super(name);
        }
    }
    console.log('继承传递参数', new Child('summer'))
}

{
    //  getter,setter都是属性，不是方法
    class Parent {
        constructor(name = 'Lay') {
            this.name = name;
        }
        get longName () {
            return 'mk' + this.name;
        }
        set longName (value) {
            this.name = value;
        }
    }

    let v = new Parent();
    console.log('getter', v.longName)

    v.longName = 'summer'
    console.log('setter', v.longName)
}

{
    //  静态方法
    class Parent {
        constructor(name = 'Lay') {
            this.name = name;
        }
        static tell () {
            console.log('tell');
        }
    }

    //  静态方法用类调用，不用生成类的实例
    Parent.tell();
}

{
    //  静态属性
    class Parent {
        constructor(name = 'Lay') {
            this.name = name;
        }
        static tell () {
            console.log('tell');
        }
    }

    Parent.type = 'test';
    console.log('静态属性', Parent.type);
}